package com.taursys.html.test;
import junit.framework.TestCase;
import com.taursys.html.*;
import com.taursys.util.*;
import com.taursys.xml.*;
import com.taursys.model.*;
import com.taursys.model.test.*;
import com.taursys.dom.*;
import org.w3c.dom.*;
import java.util.*;
import org.xml.sax.InputSource;
import org.apache.xerces.parsers.DOMParser;
/* JUnitTest case for class: com.taursys.html.HTMLComponentFactory */
public class HTMLComponentFactoryTest extends TestCase {
private TestContainer container = new TestContainer();
private TestFactory factory = null;
private VOValueHolder personHolder = new VOValueHolder();
private VOCollectionValueHolder invoiceHolder = new VOCollectionValueHolder();
private VOValueHolder unnamedHolder = new VOValueHolder();
private ValueHolder[] holders = new ValueHolder[] {
personHolder, invoiceHolder, unnamedHolder};
public HTMLComponentFactoryTest(String _name) {
super(_name);
}
/* setUp method for test case */
protected void setUp() {
factory = new TestFactory();
personHolder.setAlias("Person");
invoiceHolder.setAlias("Invoice");
unnamedHolder.setAlias(null);
}
protected void setupTestPage1() throws Exception {
DOMParser parser = new DOMParser();
InputSource is = new InputSource(
getClass().getResourceAsStream("TestPage1.html"));
parser.parse(is);
container.setDocument(parser.getDocument());
}
/* tearDown method for test case */
protected void tearDown() {
}
/* test for method getSuggestedComponents(..) */
public void testGetSuggestedComponentsForSpan() throws Exception {
setupTestPage1();
Vector suggestions = factory.getSuggestedComponents(
container.getDocumentAdapter().getElementById("Person__fullName"));
assertEquals("size", 2, suggestions.size());
assertEquals("Suggestion 1", TextField.class.getName(),
suggestions.elementAt(0));
assertEquals("Suggestion 2", DocumentElement.class.getName(),
suggestions.elementAt(1));
}
/* test for method getSuggestedComponents(..) */
public void testGetSuggestedComponentsForTemplate() throws Exception {
setupTestPage1();
Vector suggestions = factory.getSuggestedComponents(
container.getDocumentAdapter().getElementById("Invoice__TEMPLATE_NODE"));
assertEquals("size", 2, suggestions.size());
assertEquals("Suggestion 1", Template.class.getName(),
suggestions.elementAt(0));
assertEquals("Suggestion 2", DocumentElement.class.getName(),
suggestions.elementAt(1));
}
/* test for method getSuggestedComponents(..) */
public void testGetSuggestedComponentsForTD() throws Exception {
setupTestPage1();
Vector suggestions = factory.getSuggestedComponents(
container.getDocumentAdapter().getElementById("Invoice__invoiceNumber"));
assertEquals("size", 2, suggestions.size());
assertEquals("Suggestion 1", TextField.class.getName(),
suggestions.elementAt(0));
assertEquals("Suggestion 2", DocumentElement.class.getName(),
suggestions.elementAt(1));
}
/* test for method getSuggestedComponents(..) */
public void testGetSuggestedComponentsForInputText() throws Exception {
setupTestPage1();
Vector suggestions = factory.getSuggestedComponents(
container.getDocumentAdapter().getElementById("Person__lastName"));
assertEquals("size", 2, suggestions.size());
assertEquals("Suggestion 1", HTMLInputText.class.getName(),
suggestions.elementAt(0));
assertEquals("Suggestion 2", DocumentElement.class.getName(),
suggestions.elementAt(1));
}
/* test for method getSuggestedComponents(..) */
public void testGetSuggestedComponentsForSubmitButton() throws Exception {
setupTestPage1();
Vector suggestions = factory.getSuggestedComponents(
container.getDocumentAdapter().getElementById("SaveButton"));
assertEquals("size", 3, suggestions.size());
assertEquals("Suggestion 1", Button.class.getName(),
suggestions.elementAt(0));
assertEquals("Suggestion 2", Trigger.class.getName(),
suggestions.elementAt(1));
assertEquals("Suggestion 3", DocumentElement.class.getName(),
suggestions.elementAt(2));
}
public void testCreateComponentForSpan() throws Exception {
setupTestPage1();
Component component = factory.createComponentForElement(
"Person__fullName",
container.getDocumentAdapter().getElementById("Person__fullName"),
holders
);
assertNotNull("Expected component not null", component);
assertEquals("Component class", TextField.class, component.getClass());
assertEquals("Component id", "Person__fullName",
((TextField)component).getId());
assertEquals("Component holder", personHolder,
((TextField)component).getValueHolder());
assertEquals("Component property name", "fullName",
((TextField)component).getPropertyName());
assertNull("Component parameter not null",
((TextField)component).getParameter());
}
public void testCreateComponentForSpan2() throws Exception {
setupTestPage1();
Component component = factory.createComponentForElement(
"Person__fullName__2",
container.getDocumentAdapter().getElementById("Person__fullName__2"),
holders
);
assertNotNull("Expected component not null", component);
assertEquals("Component class", TextField.class, component.getClass());
assertEquals("Component id", "Person__fullName__2",
((TextField)component).getId());
assertEquals("Component holder", personHolder,
((TextField)component).getValueHolder());
assertEquals("Component property name", "fullName",
((TextField)component).getPropertyName());
assertNull("Component parameter not null",
((TextField)component).getParameter());
}
public void testCreateComponentForTemplate() throws Exception {
setupTestPage1();
Component component = factory.createComponentForElement(
"Invoice__TEMPLATE_NODE",
container.getDocumentAdapter().getElementById("Invoice__TEMPLATE_NODE"),
holders
);
assertNotNull("Expected component not null", component);
assertEquals("Component class", Template.class, component.getClass());
assertEquals("Component id", "Invoice__TEMPLATE_NODE",
((Template)component).getId());
assertEquals("Component holder", invoiceHolder,
((Template)component).getCollectionValueHolder());
}
public void testCreateComponentForBad1() throws Exception {
setupTestPage1();
Component component = factory.createComponentForElement(
"__",
container.getDocumentAdapter().getElementById("__"),
holders
);
assertNull("Expected null", component);
}
public void testCreateComponentForBad2() throws Exception {
setupTestPage1();
Component component = factory.createComponentForElement(
"Person__",
container.getDocumentAdapter().getElementById("Person__"),
holders
);
assertNull("Expected null", component);
}
public void testCreateComponentForInputText() throws Exception {
setupTestPage1();
Component component = factory.createComponentForElement(
"Person__lastName",
container.getDocumentAdapter().getElementById("Person__lastName"),
holders
);
assertNotNull("Expected component not null", component);
assertEquals("Component class", HTMLInputText.class, component.getClass());
assertEquals("Component id", "Person__lastName",
((HTMLInputText)component).getId());
assertEquals("Component holder", personHolder,
((HTMLInputText)component).getValueHolder());
assertEquals("Component property name", "lastName",
((HTMLInputText)component).getPropertyName());
assertEquals("Component parameter", "lastName",
((HTMLInputText)component).getParameter());
}
public void testCreateComponentForInputCheckbox() throws Exception {
setupTestPage1();
Component component = factory.createComponentForElement(
"Person__active",
container.getDocumentAdapter().getElementById("Person__active"),
holders
);
assertNotNull("Expected component not null", component);
assertEquals("Component class", HTMLCheckBox.class, component.getClass());
assertEquals("Component id", "Person__active",
((HTMLCheckBox)component).getId());
assertEquals("Component holder", personHolder,
((HTMLCheckBox)component).getValueHolder());
assertEquals("Component property name", "active",
((HTMLCheckBox)component).getPropertyName());
assertEquals("Component parameter", "active",
((HTMLCheckBox)component).getParameter());
/** @todo New feature to pickup value in document */
// assertEquals("Component selected value", "Y",
// ((HTMLCheckBox)component).getSelectedValue());
assertEquals("Component unselected value", "",
((HTMLCheckBox)component).getUnselectedValue());
}
public void testCreateComponentsWithoutExisting() throws Exception {
setupTestPage1();
factory.createComponents(container, holders);
Component[] components = container.getComponents();
assertEquals("Component count in master container", 7, components.length);
assertEquals("Component 0", TextField.class, components[0].getClass());
assertEquals("Component 1", TextField.class, components[1].getClass());
assertEquals("Component 2", Template.class, components[2].getClass());
assertEquals("Component 3", HTMLInputText.class, components[3].getClass());
assertEquals("Component 4", HTMLInputText.class, components[4].getClass());
assertEquals("Component 5", HTMLCheckBox.class, components[5].getClass());
assertEquals("Component 6", HTMLAnchorURL.class, components[6].getClass());
components = ((Template)components[2]).getComponents();
assertEquals("Component count in template container", 3, components.length);
assertEquals("Component 0", TextField.class, components[0].getClass());
assertEquals("Component 1", TextField.class, components[1].getClass());
assertEquals("Component 2", TextField.class, components[2].getClass());
}
public void testCreateComponentsWithExistingTopContainer() throws Exception {
setupTestPage1();
Button button = new Button();
button.setId("SaveButton");
button.setParameter("action");
button.setText("Save");
container.add(button);
factory.createComponents(container, holders);
Component[] components = container.getComponents();
assertEquals("Component count in master container", 8, components.length);
assertEquals("Component 0", TextField.class, components[0].getClass());
assertEquals("Component 1", TextField.class, components[1].getClass());
assertEquals("Component 2", Template.class, components[2].getClass());
assertEquals("Component 3", HTMLInputText.class, components[3].getClass());
assertEquals("Component 4", HTMLInputText.class, components[4].getClass());
assertEquals("Component 5", HTMLCheckBox.class, components[5].getClass());
assertEquals("Component 6", Button.class, components[6].getClass());
assertEquals("Component 7", HTMLAnchorURL.class, components[7].getClass());
components = ((Template)components[2]).getComponents();
assertEquals("Component count in template container", 3, components.length);
assertEquals("Component 0", TextField.class, components[0].getClass());
assertEquals("Component 1", TextField.class, components[1].getClass());
assertEquals("Component 2", TextField.class, components[2].getClass());
}
public void testCreateComponentsWithExistingSubContainer() throws Exception {
setupTestPage1();
Button button = new Button();
button.setId("SaveButton");
button.setParameter("action");
button.setText("Save");
container.add(button);
TextField field = new TextField();
field.setId("Invoice__issueDate");
container.add(field);
factory.createComponents(container, holders);
Component[] components = container.getComponents();
assertEquals("Component count in master container", 8, components.length);
assertEquals("Component 0", TextField.class, components[0].getClass());
assertEquals("Component 1", TextField.class, components[1].getClass());
assertEquals("Component 2", Template.class, components[2].getClass());
assertEquals("Component 3", HTMLInputText.class, components[3].getClass());
assertEquals("Component 4", HTMLInputText.class, components[4].getClass());
assertEquals("Component 5", HTMLCheckBox.class, components[5].getClass());
assertEquals("Component 6", Button.class, components[6].getClass());
assertEquals("Component 7", HTMLAnchorURL.class, components[7].getClass());
components = ((Template)components[2]).getComponents();
assertEquals("Component count in template container", 3, components.length);
assertEquals("Component 0", TextField.class, components[0].getClass());
// Make sure Component 1 is the same field we created ahead of time.
assertEquals("Component 1", field, components[1]);
assertEquals("Component 2", TextField.class, components[2].getClass());
}
public void testCreateComponentWithDateFormat() throws Exception {
setupTestPage1();
Component component = factory.createComponentForElement(
"Invoice__issueDate",
container.getDocumentAdapter().getElementById("Invoice__issueDate"),
holders
);
assertNotNull("Expected component not null", component);
assertEquals("Component class", TextField.class, component.getClass());
assertNotNull("Component format should not be null",
((TextField)component).getFormat());
assertEquals("Component format class", java.text.SimpleDateFormat.class,
((TextField)component).getFormat().getClass());
assertEquals("Component format pattern", "MM/dd/yyyy",
((TextField)component).getFormatPattern());
}
public void testCreateComponentWithNumberFormat() throws Exception {
setupTestPage1();
Component component = factory.createComponentForElement(
"Invoice__invoiceNumber",
container.getDocumentAdapter().getElementById("Invoice__invoiceNumber"),
holders
);
assertNotNull("Expected component not null", component);
assertEquals("Component class", TextField.class, component.getClass());
assertNotNull("Component format should not be null",
((TextField)component).getFormat());
assertEquals("Component format class", java.text.DecimalFormat.class,
((TextField)component).getFormat().getClass());
assertEquals("Component format pattern", "0000000",
((TextField)component).getFormatPattern());
}
public void testCreateComponentWithMessageFormat() throws Exception {
setupTestPage1();
Component component = factory.createComponentForElement(
"Invoice__customerID",
container.getDocumentAdapter().getElementById("Invoice__customerID"),
holders
);
assertNotNull("Expected component not null", component);
assertEquals("Component class", TextField.class, component.getClass());
assertNotNull("Component format should not be null",
((TextField)component).getFormat());
assertEquals("Component format class", java.text.MessageFormat.class,
((TextField)component).getFormat().getClass());
assertEquals("Component format pattern", "CustNo={0}",
((TextField)component).getFormatPattern());
}
public void testCreateComponentWithMessageFormatInValueAttribute() throws Exception {
setupTestPage1();
Component component = factory.createComponentForElement(
"Person__lastName",
container.getDocumentAdapter().getElementById("Person__lastName"),
holders
);
assertNotNull("Expected component not null", component);
assertEquals("Component class", HTMLInputText.class, component.getClass());
assertNotNull("Component format should not be null",
((HTMLInputText)component).getFormat());
assertEquals("Component format class", java.text.MessageFormat.class,
((HTMLInputText)component).getFormat().getClass());
assertEquals("Component format pattern", "{0}",
((HTMLInputText)component).getFormatPattern());
}
public void testCreateComponentWithoutFormat() throws Exception {
setupTestPage1();
Component component = factory.createComponentForElement(
"Person__fullName",
container.getDocumentAdapter().getElementById("Person__fullName"),
holders
);
assertNotNull("Expected component not null", component);
assertEquals("Component class", TextField.class, component.getClass());
assertNull("Component format should be null",
((TextField)component).getFormat());
assertNull("Component format pattern should be null",
((TextField)component).getFormatPattern());
}
public void testCreateComponentWithMessageFormatInHrefAttribute() throws Exception {
setupTestPage1();
Component component = factory.createComponentForElement(
"Person__personID",
container.getDocumentAdapter().getElementById("Person__personID"),
holders
);
assertNotNull("Expected component not null", component);
assertEquals("Component class", HTMLAnchorURL.class, component.getClass());
assertNotNull("Component format should not be null",
((HTMLAnchorURL)component).getFormat());
assertEquals("Component format class", java.text.MessageFormat.class,
((HTMLAnchorURL)component).getFormat().getClass());
assertEquals("Component format pattern", "http://localhost/mypage.mxform?pid={0}",
((HTMLAnchorURL)component).getFormatPattern());
}
// ==========================================================================
// Test Support Methods and Classes
// ==========================================================================
/**
* Test Factory Class
*/
class TestFactory extends HTMLComponentFactory {
protected Component createComponentForElement(String id, Element element,
ValueHolder[] holders) {
return super.createComponentForElement(id, element, holders);
}
}
/**
* Test Container Class
*/
class TestContainer extends Container {
private DocumentAdapter documentAdapter;
public DocumentAdapter getDocumentAdapter() {
return documentAdapter;
}
public void setDocument(org.w3c.dom.Document newDocument) {
documentAdapter = new DOM_1_20000929_DocumentAdapter(newDocument);
}
public void removeNotify() {}
public void addNotify() {}
public org.w3c.dom.Document getDocument() {
if (documentAdapter == null)
return null;
else
return documentAdapter.getDocument();
}
}
/* Executes the test case */
public static void main(String[] argv) {
String[] testCaseList = {HTMLComponentFactoryTest.class.getName()};
junit.swingui.TestRunner.main(testCaseList);
}
}